package models

import (
	"time"
)

type GoadminUsers struct {
	ID uint `gorm:"primaryKey;autoIncrement" json:"id"`
	// 用户名
	Username string `gorm:"not null;uniqueIndex" json:"username"`
	// 密码
	Password string `gorm:"not null" json:"password"`
	// 昵称
	Name string `gorm:"not null" json:"name"`
	// 头像
	Avatar        *string `gorm:"default:null" json:"avatar"`
	RememberToken *string `gorm:"default:null" json:"rememberToken"`
	// 角色列表
	Roles []*GoadminRoles `json:"roles"`

	// 权限列表
	Permissions []*GoadminPermissions `json:"permissions"`
	CreatedAt   *time.Time            `gorm:"default:CURRENT_TIMESTAMP" json:"created_at"`
	UpdatedAt   *time.Time            `gorm:"default:CURRENT_TIMESTAMP" json:"updated_at"`
}

func (GoadminUsers) TableName() string {
	return "goadmin_users"
}

// GoadminRoles 角色模型
type GoadminRoles struct {
	ID uint `gorm:"primaryKey;autoIncrement" json:"id"`
	// 角色名称
	Name string `gorm:"not null;uniqueIndex" json:"name"`
	// 角色唯一标识, 目前只有4种 GreenhouseManager:大棚管理员,Boss:老板,Manager:经理,SowingManager:播种管理员
	Slug      string     `gorm:"not null" json:"slug" enums:"GreenhouseManager,Boss,Manager,SowingManager"`
	CreatedAt *time.Time `gorm:"default:CURRENT_TIMESTAMP" json:"created_at"`
	UpdatedAt *time.Time `gorm:"default:CURRENT_TIMESTAMP" json:"updated_at"`

	// 权限列表
	Permissions []*GoadminPermissions `json:"permissions"`
}

func (GoadminRoles) TableName() string {
	return "goadmin_roles"
}

// GoadminPermission 权限模型
type GoadminPermissions struct {
	ID uint `gorm:"primaryKey;autoIncrement" json:"id"`
	// 权限名称
	Name string `gorm:"not null;uniqueIndex" json:"name"`
	// 权限唯一标识,格式为 "权限名_动作" 权限名为url中 "/api/v1/"之后的第一后缀, 动作含:query,create,edit,delete
	Slug string `gorm:"not null" json:"slug"`
	// 支持的http method
	HttpMethod *string `gorm:"default:null" json:"http_method"`
	// 支持的url
	HttpPath  string     `gorm:"not null" json:"http_path"`
	CreatedAt *time.Time `gorm:"default:CURRENT_TIMESTAMP" json:"created_at"`
	UpdatedAt *time.Time `gorm:"default:CURRENT_TIMESTAMP" json:"updated_at"`
}

func (GoadminPermissions) TableName() string {
	return "goadmin_permissions"
}
